/*
* Copyright (C) 2012-2013, <Aeihu.z, aeihu.z@gmail.com>.
*
* Game Scenario Maker is a free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2(GPLv2) as published by the Free Software Foundation.
*/

//#include "CBattle.h"
//#include <cstdlib>
//#include <ctime>
//
//CBattle    CBattle::battle;
//
//CBattle::CBattle()
//{
//}
//
//void CBattle::Positioning(vector<CCharacterData> PlayerTeam, vector<CCharacterData> EnemyTeam)
//{
//    int    maxpostion = 8;
//    vector<CCharacterData> standrad, medium, large;
//    for (int i = EnemyTeam.size() - 1; i >= 0; i--)
//    {
//        if (EnemyTeam[i].Figure > maxpostion)
//            continue;
//
//        switch (EnemyTeam[i].Figure)
//        {
//            case FIGURE_STANDARD:
//                maxpostion -= 1;
//                standrad.push_back(EnemyTeam[i]);
//            break;
//            case FIGURE_MEDIUM:
//                maxpostion -= 2;
//                medium.push_back(EnemyTeam[i]);
//            break;
//            case FIGURE_LARGE:
//                maxpostion -= 4;
//                large.push_back(EnemyTeam[i]);
//            break;
//        }
//    }
//
//    maxpostion = 0;
//    SDL_Rect rect;
//    for (int i = 0; i < large.size(); i++)
//    {
//        switch (i)
//        {
//            case 0:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION1_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION1_Y;
//            break;
//            case 1:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION5_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION5_Y;
//            break;
//        }
//        maxpostion += 4;
//        EnemyDataList.push_back(make_pair(&large[i], rect));
//    }
//
//    for (int i = 0; i < medium.size(); i++)
//    {
//        switch (maxpostion)
//        {
//            case 0:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION1_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION1_Y;
//            break;
//            case 2:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION3_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION3_Y;
//            break;
//            case 4:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION5_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION5_Y;
//            break;
//            case 6:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION7_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION7_Y;
//            break;
//        }
//        maxpostion += 2;
//        EnemyDataList.push_back(make_pair(&medium[i],rect));
//    }
//
//    for (int i = 0; i < standrad.size(); i++)
//    {
//        switch (i + maxpostion)
//        {
//            case 0:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION1_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION1_Y;
//            break;
//            case 1:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION2_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION2_Y;
//            break;
//            case 2:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION3_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION3_Y;
//            break;
//            case 3:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION4_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION4_Y;
//            break;
//            case 4:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION5_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION5_Y;
//            break;
//            case 5:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION6_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION6_Y;
//            break;
//            case 6:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION7_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION7_Y;
//            break;
//            case 7:
//                rect.x = CCommon::common.BATTLE_ENEMY_POSTION8_X;
//                rect.y = CCommon::common.BATTLE_ENEMY_POSTION8_Y;
//            break;
//        }
//        EnemyDataList.push_back(make_pair(&standrad[i],rect));
//    }
//    
//    for (int i = 0; i < PlayerTeam.size(); i++)
//    {
//        switch (i)
//        {
//            case 0:
//                rect.x = CCommon::common.BATTLE_PLAYER_POSTION1_X;
//                rect.y = CCommon::common.BATTLE_PLAYER_POSTION1_Y;
//            break;
//            case 1:
//                rect.x = CCommon::common.BATTLE_PLAYER_POSTION2_X;
//                rect.y = CCommon::common.BATTLE_PLAYER_POSTION2_Y;
//            break;
//            case 2:
//                rect.x = CCommon::common.BATTLE_PLAYER_POSTION3_X;
//                rect.y = CCommon::common.BATTLE_PLAYER_POSTION3_Y;
//            break;
//            case 3:
//                rect.x = CCommon::common.BATTLE_PLAYER_POSTION4_X;
//                rect.y = CCommon::common.BATTLE_PLAYER_POSTION4_Y;
//            break;
//        }
//
//        PlayerDataList.push_back(make_pair(&medium[i],rect));
//    }
//    
//    large.clear();
//    medium.clear();
//    standrad.clear();
//    EnemyTeam.clear();
//    PlayerTeam.clear();
//}
//
//bool CBattle::OnInit(const char* FileName, vector<CCharacterData> PlayerTeam, vector<CCharacterData> EnemyTeam)
//{
//    if (Surf_Background != NULL)
//    {
//        SDL_FreeSurface(Surf_Background);
//        Surf_Background = NULL;
//    }
//    
//    Surf_Background = CSurface::OnLoad(FileName);
//    
//    if (Surf_Background == NULL)
//    {
//        PlayerTeam.clear();
//        EnemyTeam.clear();
//        return false;
//    }
//
//    Turns = 0;
//
//    Positioning(PlayerTeam, EnemyTeam);
//    PlayerTeam.clear();
//    EnemyTeam.clear();
//
//    for (int i = EnemyDataList.size() - 1; i >= 0; i--)
//    {
//        CAnimationBank::animationbank.AnimationList
//            [EnemyDataList[i].first->Name + "_" + EnemyDataList[i].first->Equip_Hand.Anime_Standby].Start(
//                EnemyDataList[i].second.x, EnemyDataList[i].second.y);
//    }
//
//    for (int i = PlayerDataList.size() - 1; i >= 0; i--)
//    {
//        CAnimationBank::animationbank.AnimationList
//            [PlayerDataList[i].first->Name + "_" + PlayerDataList[i].first->Equip_Hand.Anime_Standby].Start(
//                PlayerDataList[i].second.x, PlayerDataList[i].second.y);
//    }
//    return true;
//}
//
//void CBattle::OnLoop()
//{
//    //for (int i = )
//    //CAnimationBank::animationbank.OnLoop();
//}
//
//void CBattle::OnRender(SDL_Surface* Surf_Dest)
//{
//    if (Surf_Background != NULL)
//        CSurface::OnDraw(Surf_Dest, Surf_Background);
//
//    //string str = "";
//    //for (int i = EnemyDataList.size() - 1; i >= 0 ; i--)
//    //{
//    //    str = "";
//    //    switch (EnemyDataList[i].first->Action)
//    //    {
//    //        case ACTION_STANDBY:
//    //            str = EnemyDataList[i].first->Name + "_" + EnemyDataList[i].first->Equip_Hand.Anime_Standby;
//    //        break;
//    //        case ACTION_ATTACK:
//    //            str = EnemyDataList[i].first->Name + "_" + EnemyDataList[i].first->Equip_Hand.Anime_Attack;
//    //        break;
//    //        case ACTION_WEAK:
//    //            str = EnemyDataList[i].first->Name + "_" + EnemyDataList[i].first->Equip_Hand.Anime_Weak;
//    //        break;
//    //        case ACTION_DEAD:
//    //            str = EnemyDataList[i].first->Name + "_" + EnemyDataList[i].first->Equip_Hand.Anime_Dead;
//    //        break;
//    //    }
//    //    CAnimationBank::animationbank.OnRender(Surf_Dest);
//    //}
//}
//
//void CBattle::OnCleanup()
//{
//    if(Surf_Background)
//    {
//        SDL_FreeSurface(Surf_Background);
//        Surf_Background = NULL;
//    }
//}
//
//int CBattle::Normal_Attack(CCharacterData atk, CCharacterData &def)
//{
//    srand((unsigned)time(0));
//
//    int value_added = rand() % 20 + 1;
//    int Damage = 0;
//    if (value_added > 1)
//    {
//        if (atk.DEX + (value_added) - def.DEX || value_added == 20)
//        {
//            int TOTAL_ATK = atk.N_ATK;
//            int TOTAL_DEF = def.N_DEF;
//            TOTAL_ATK += atk.Equip_Body.N_ATK;
//            TOTAL_ATK += atk.Equip_Head.N_ATK;
//            TOTAL_ATK += atk.Equip_Hand.N_ATK;
//            TOTAL_ATK += atk.Equip_Other1.N_ATK;
//            TOTAL_ATK += atk.Equip_Other2.N_ATK;
//
//            TOTAL_DEF += def.Equip_Body.N_DEF;
//            TOTAL_DEF += def.Equip_Head.N_DEF;
//            TOTAL_DEF += def.Equip_Hand.N_DEF;
//            TOTAL_DEF += def.Equip_Other1.N_DEF;
//            TOTAL_DEF += def.Equip_Other2.N_DEF;
//
//            Damage = TOTAL_ATK - TOTAL_DEF;
//
//            if (Damage < 1)
//                Damage = 0;
//            else
//            {
//                if (value_added == 20)
//                    Damage += Damage / 2;
//            }
//        }
//    }
//
//    return Damage;
//}
//
//int CBattle::Magic_Attack(CCharacterData atk, CCharacterData &def)
//{
//    srand((unsigned)time(0));
//    int value_added = rand() % 20 + 1;
//    int Damage = 0;
//
//    if (value_added > 1)
//    {
//        if (atk.INT + (value_added) - def.INT || value_added == 20)
//        {
//            int TOTAL_ATK = atk.M_ATK;
//            int TOTAL_DEF = def.M_DEF;
//            
//            TOTAL_ATK += atk.Equip_Body.M_ATK;
//            TOTAL_ATK += atk.Equip_Head.M_ATK;
//            TOTAL_ATK += atk.Equip_Hand.M_ATK;
//            TOTAL_ATK += atk.Equip_Other1.M_ATK;
//            TOTAL_ATK += atk.Equip_Other2.M_ATK;
//
//            TOTAL_DEF += def.Equip_Body.M_DEF;
//            TOTAL_DEF += def.Equip_Head.M_DEF;
//            TOTAL_DEF += def.Equip_Hand.M_DEF;
//            TOTAL_DEF += def.Equip_Other1.M_DEF;
//            TOTAL_DEF += def.Equip_Other2.M_DEF;
//            
//            if (Damage < 1)
//                Damage = 0;
//            else
//            {
//                if (value_added == 20)
//                    Damage += Damage / 2;
//            }
//        }
//    }
//    return Damage;
//}
//
//
//int CBattle::Skill_Attack(CCharacterData atk, CCharacterData &def)
//{
//    srand((unsigned)time(0));
//    int value_added = rand() % 20 + 1;
//    int Damage = 0;
//
//    if (value_added > 1)
//    {
//        if (atk.INT + (value_added) - def.INT || value_added == 20)
//        {
//            int TOTAL_ATK = atk.M_ATK;
//            int TOTAL_DEF = def.M_DEF;
//            
//            TOTAL_ATK += atk.Equip_Body.M_ATK;
//            TOTAL_ATK += atk.Equip_Head.M_ATK;
//            TOTAL_ATK += atk.Equip_Hand.M_ATK;
//            TOTAL_ATK += atk.Equip_Other1.M_ATK;
//            TOTAL_ATK += atk.Equip_Other2.M_ATK;
//
//            TOTAL_DEF += def.Equip_Body.M_DEF;
//            TOTAL_DEF += def.Equip_Head.M_DEF;
//            TOTAL_DEF += def.Equip_Hand.M_DEF;
//            TOTAL_DEF += def.Equip_Other1.M_DEF;
//            TOTAL_DEF += def.Equip_Other2.M_DEF;
//            
//            if (Damage < 1)
//                Damage = 0;
//            else
//            {
//                if (value_added == 20)
//                    Damage += Damage / 2;
//            }
//        }
//    }
//    return Damage;
//}